package luogu;

import java.io.*;

public class A1776 {
    static int N=2000;
    static int M=40050;
    static int n;//宝物种数
    static int m;//载重
    static int[] w=new int[N];//重量
    static int[] s=new int[N];//数量
    static int[] v=new int[N];//价值
    static BufferedReader read=new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter log=new BufferedWriter(new OutputStreamWriter(System.out));
static int[] dp=new int[M];

    public static void main(String[] args) throws IOException {
        String[] s1 = read.readLine().split(" ");
      n=Integer.parseInt(s1[0]);
      m=Integer.parseInt(s1[1]);
      int cnt=0;//组别
      for(int i=1;i<=n;i++){
          String[] s2 = read.readLine().split(" ");
          int a=Integer.parseInt(s2[0]);//价值
          int b=Integer.parseInt(s2[1]);//重量
          int s=Integer.parseInt(s2[2]);//数量
          int k=1;//第一组数量为1
          while(k<=s){
              cnt++;
                     v[cnt]=a*k;//价值
                     w[cnt]=b*k;//重量
                     s-=k;
                     k*=2;
          }
          if(s>0){
              cnt++;
              v[cnt]=a*s;//价值
              w[cnt]=b*s;//重量
          }
      }
      n=cnt;//至此，我们是对第i组进行决策
        for(int i=1;i<=n;i++){
            for(int j=m;j>=w[i];j--){//枚举重量
                    dp[j]=Math.max(dp[j],dp[j-w[i]]+v[i]);

            }
        }
        //输出结果
        log.write(Integer.toString(dp[m]));
log.flush();
    }
}
